# -*- coding: utf-8 -*-
"""
Excel测试数据生成器
用于生成API测试用例的Excel文件
"""

import pandas as pd
import os
from pathlib import Path
import time


def generate_excel_test_data():
    """生成Excel测试数据文件"""
    
    # 生成时间戳用于唯一标识
    timestamp = str(int(time.time()))
    
    # 用户创建测试用例数据
    user_create_data = [
        {
            'test_case_id': 'TC001',
            'test_name': '创建用户-正常数据',
            'api_method': 'POST',
            'api_path': '/api/v1/users',
            'name': '张三',
            'email': f'zhangsan_{timestamp}@example.com',
            'age': 25,
            'expected_status': 201,
            'expected_result': 'success',
            'description': '使用正常数据创建用户'
        },
        {
            'test_case_id': 'TC002',
            'test_name': '创建用户-边界年龄',
            'api_method': 'POST',
            'api_path': '/api/v1/users',
            'name': '李四',
            'email': f'lisi_{timestamp}@example.com',
            'age': 18,
            'expected_status': 201,
            'expected_result': 'success',
            'description': '使用边界年龄18岁创建用户'
        },
        {
            'test_case_id': 'TC003',
            'test_name': '创建用户-高龄用户',
            'api_method': 'POST',
            'api_path': '/api/v1/users',
            'name': '王五',
            'email': f'wangwu_{timestamp}@example.com',
            'age': 65,
            'expected_status': 201,
            'expected_result': 'success',
            'description': '创建高龄用户测试'
        },
        {
            'test_case_id': 'TC004',
            'test_name': '创建用户-无效邮箱',
            'api_method': 'POST',
            'api_path': '/api/v1/users',
            'name': '赵六',
            'email': 'invalid-email',
            'age': 30,
            'expected_status': 422,
            'expected_result': 'validation_error',
            'description': '使用无效邮箱格式创建用户'
        },
        {
            'test_case_id': 'TC005',
            'test_name': '创建用户-负数年龄',
            'api_method': 'POST',
            'api_path': '/api/v1/users',
            'name': '孙七',
            'email': f'sunqi_{timestamp}@example.com',
            'age': -5,
            'expected_status': 422,
            'expected_result': 'validation_error',
            'description': '使用负数年龄创建用户'
        },
        {
            'test_case_id': 'TC006',
            'test_name': '创建用户-空姓名',
            'api_method': 'POST',
            'api_path': '/api/v1/users',
            'name': '',
            'email': f'empty_{timestamp}@example.com',
            'age': 25,
            'expected_status': 422,
            'expected_result': 'validation_error',
            'description': '使用空姓名创建用户'
        }
    ]
    
    # 用户查询测试用例数据
    user_query_data = [
        {
            'test_case_id': 'TC007',
            'test_name': '查询所有用户',
            'api_method': 'GET',
            'api_path': '/api/v1/users',
            'name': '',
            'email': '',
            'age': '',
            'expected_status': 200,
            'expected_result': 'success',
            'description': '获取所有用户列表'
        },
        {
            'test_case_id': 'TC008',
            'test_name': '查询不存在用户',
            'api_method': 'GET',
            'api_path': '/api/v1/users/999',
            'name': '',
            'email': '',
            'age': '',
            'expected_status': 404,
            'expected_result': 'not_found',
            'description': '查询不存在的用户ID'
        }
    ]
    
    # 系统接口测试用例数据
    system_api_data = [
        {
            'test_case_id': 'TC009',
            'test_name': '健康检查接口',
            'api_method': 'GET',
            'api_path': '/health',
            'name': '',
            'email': '',
            'age': '',
            'expected_status': 200,
            'expected_result': 'success',
            'description': '检查系统健康状态'
        },
        {
            'test_case_id': 'TC010',
            'test_name': '根路径接口',
            'api_method': 'GET',
            'api_path': '/',
            'name': '',
            'email': '',
            'age': '',
            'expected_status': 200,
            'expected_result': 'success',
            'description': '访问根路径接口'
        }
    ]
    
    # 合并所有测试数据
    all_test_data = user_create_data + user_query_data + system_api_data
    
    # 创建DataFrame
    df = pd.DataFrame(all_test_data)
    
    # 获取当前文件所在目录
    current_dir = Path(__file__).parent
    excel_file_path = current_dir / f'test_cases_{timestamp}.xlsx'
    
    # 创建Excel文件，包含多个工作表
    with pd.ExcelWriter(excel_file_path, engine='openpyxl') as writer:
        # 所有测试用例
        df.to_excel(writer, sheet_name='所有测试用例', index=False)
        
        # 用户创建测试用例
        pd.DataFrame(user_create_data).to_excel(writer, sheet_name='用户创建测试', index=False)
        
        # 用户查询测试用例
        pd.DataFrame(user_query_data).to_excel(writer, sheet_name='用户查询测试', index=False)
        
        # 系统接口测试用例
        pd.DataFrame(system_api_data).to_excel(writer, sheet_name='系统接口测试', index=False)
    
    print(f"Excel测试数据文件已生成: {excel_file_path}")
    return excel_file_path


if __name__ == '__main__':
    generate_excel_test_data()